package collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * JDK5推出时，推出了一个新的特性：增强型for循环
 * 也称为新循环，它可以用相同的语法遍历集合或数组
 *
 * 新循环是java编译器认可的，并非虚拟机。
 */
public class NewForDemo5_8 {
    public static void main(String[] args) {
        String [] array={"one","two","three","four","five"};
        for(int i=0;i<array.length;i++){
            System.out.print(array[i]+"\t");
        }
        System.out.println();
        //新循环遍历数组就是普通for循环遍历，编译器编译后就会改为普通for循环
        for(String st:array){
            System.out.print(st+"\t");
        }
        System.out.println();
        /*
        泛型JDK5之后退出的另一个特性。
        泛型也称为参数化类型，允许我们在使用一个类时指定它里面属性的类型，
        方法参数或返回值的类型，使得我们使用一个类时可以更灵活。
        泛型被广泛应用于集合中，用来指定集合中的元素类型。
        支持泛型的类在使用时如果未指定泛型，那么默认就是原型Object
         */
        Collection <String>c=new ArrayList<>();
        c.add("one");
        c.add("two");
        c.add("three");
        c.add("four");
        c.add("five");
        Iterator<String> it=c.iterator();
        while(it.hasNext()){
            //编译器编译代码时会根据迭代器指定的泛型补充造型代码
            String str=it.next();//获取元素时无需在造型。
            System.out.print(str+"\t");
        }
        System.out.println();
        //新循环遍历集合就是迭代器遍历，编译器编译代码后悔改为迭代器
        //因此不要在新循环遍历集合的过程中使用集合的方法增删元素，
        for(String str:c){
            System.out.print(str+"\t");
        }
    }
}
